package red.ouo.distributedtools.standard.message;

import red.ouo.distributedtools.standard.callback.CallbackStatus;

public interface MessageCoreInterface<T> {
    /**
     * 发送消息
     * @param messageBody 通用消息体
     * @return
     */
    MessageBody<T> send(MessageBody<T> messageBody);

    /**
     * 拉取指定数量的消息并指定等待超时
     * @param callback 消息回调
     * @param count 消息数量
     * @param timeOut 等待超时 0永远等待
     * @return
     */
    Object fetchSomeTimeOut(CallbackStatus<MessageBody<T>> callback, Integer count, Integer timeOut);

    /**
     * 消息处理结果
     * @param messageBody
     * @param messageStatus
     */
    void operation(MessageBody<T> messageBody, MessageStatus messageStatus);
}
